<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Flow-IPC: ipc::util::Native_handle Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectalign">
   <div id="projectname">Flow-IPC<span id="projectnumber">&#160;2.0.0</span>
   </div>
   <div id="projectbrief">Flow-IPC project: Full implementation reference.</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="namespaceipc.html">ipc</a></li><li class="navelem"><a class="el" href="namespaceipc_1_1util.html">util</a></li><li class="navelem"><a class="el" href="structipc_1_1util_1_1Native__handle.html">Native_handle</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pub-attribs">Public Attributes</a> &#124;
<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
<a href="#related">Related Functions</a> &#124;
<a href="structipc_1_1util_1_1Native__handle-members.html">List of all members</a>  </div>
  <div class="headertitle"><div class="title">ipc::util::Native_handle Struct Reference</div></div>
</div><!--header-->
<div class="contents">

<p>A monolayer-thin wrapper around a native handle, a/k/a descriptor a/k/a FD.  
 <a href="structipc_1_1util_1_1Native__handle.html#details">More...</a></p>

<p><code>#include &lt;<a class="el" href="native__handle_8hpp_source.html">native_handle.hpp</a>&gt;</code></p>
<div class="dynheader">
Collaboration diagram for ipc::util::Native_handle:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="structipc_1_1util_1_1Native__handle__coll__graph.svg" width="276" height="119"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-types" name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:a7194e8aaf9fc0109aad80222ae4ecb25"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structipc_1_1util_1_1Native__handle.html#a7194e8aaf9fc0109aad80222ae4ecb25">handle_t</a> = int</td></tr>
<tr class="memdesc:a7194e8aaf9fc0109aad80222ae4ecb25"><td class="mdescLeft">&#160;</td><td class="mdescRight">The native handle type. Much logic relies on this type being light-weight (fast to copy).  <a href="structipc_1_1util_1_1Native__handle.html#a7194e8aaf9fc0109aad80222ae4ecb25">More...</a><br /></td></tr>
<tr class="separator:a7194e8aaf9fc0109aad80222ae4ecb25"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a54a6ce76ea4ce5aa68da13d7a677ca9f"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structipc_1_1util_1_1Native__handle.html#a54a6ce76ea4ce5aa68da13d7a677ca9f">Native_handle</a> (<a class="el" href="structipc_1_1util_1_1Native__handle.html#a7194e8aaf9fc0109aad80222ae4ecb25">handle_t</a> native_handle=<a class="el" href="structipc_1_1util_1_1Native__handle.html#a68e693929170523d58b541d466bac03a">S_NULL_HANDLE</a>)</td></tr>
<tr class="memdesc:a54a6ce76ea4ce5aa68da13d7a677ca9f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs with given payload; also subsumes no-args construction to mean constructing an object with <code><a class="el" href="structipc_1_1util_1_1Native__handle.html#a11bd62ce0a7bef4bdfe666201c26d4dc" title="Returns true if and only if m_native_handle equals S_NULL_HANDLE.">null()</a> == true</code>.  <a href="structipc_1_1util_1_1Native__handle.html#a54a6ce76ea4ce5aa68da13d7a677ca9f">More...</a><br /></td></tr>
<tr class="separator:a54a6ce76ea4ce5aa68da13d7a677ca9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7176d013b1f8e0e09ba45d6fe7a81bb5"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structipc_1_1util_1_1Native__handle.html#a7176d013b1f8e0e09ba45d6fe7a81bb5">Native_handle</a> (<a class="el" href="structipc_1_1util_1_1Native__handle.html">Native_handle</a> &amp;&amp;src)</td></tr>
<tr class="memdesc:a7176d013b1f8e0e09ba45d6fe7a81bb5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs object equal to <code>src</code>, while making <code>src == <a class="el" href="structipc_1_1util_1_1Native__handle.html#a11bd62ce0a7bef4bdfe666201c26d4dc" title="Returns true if and only if m_native_handle equals S_NULL_HANDLE.">null()</a></code>.  <a href="structipc_1_1util_1_1Native__handle.html#a7176d013b1f8e0e09ba45d6fe7a81bb5">More...</a><br /></td></tr>
<tr class="separator:a7176d013b1f8e0e09ba45d6fe7a81bb5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a45ae7a5b093b5419a524cf30b07921c4"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structipc_1_1util_1_1Native__handle.html#a45ae7a5b093b5419a524cf30b07921c4">Native_handle</a> (const <a class="el" href="structipc_1_1util_1_1Native__handle.html">Native_handle</a> &amp;src)</td></tr>
<tr class="memdesc:a45ae7a5b093b5419a524cf30b07921c4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy constructor.  <a href="structipc_1_1util_1_1Native__handle.html#a45ae7a5b093b5419a524cf30b07921c4">More...</a><br /></td></tr>
<tr class="separator:a45ae7a5b093b5419a524cf30b07921c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6e321b8cc4628d56cc903beae13c6438"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structipc_1_1util_1_1Native__handle.html">Native_handle</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structipc_1_1util_1_1Native__handle.html#a6e321b8cc4628d56cc903beae13c6438">operator=</a> (<a class="el" href="structipc_1_1util_1_1Native__handle.html">Native_handle</a> &amp;&amp;src)</td></tr>
<tr class="memdesc:a6e321b8cc4628d56cc903beae13c6438"><td class="mdescLeft">&#160;</td><td class="mdescRight">Move assignment; acts similarly to move ctor; but no-op if <code>*this == src</code>.  <a href="structipc_1_1util_1_1Native__handle.html#a6e321b8cc4628d56cc903beae13c6438">More...</a><br /></td></tr>
<tr class="separator:a6e321b8cc4628d56cc903beae13c6438"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad1d01d9b502f65c6fe0d8d4a1488cec4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structipc_1_1util_1_1Native__handle.html">Native_handle</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structipc_1_1util_1_1Native__handle.html#ad1d01d9b502f65c6fe0d8d4a1488cec4">operator=</a> (const <a class="el" href="structipc_1_1util_1_1Native__handle.html">Native_handle</a> &amp;src)</td></tr>
<tr class="memdesc:ad1d01d9b502f65c6fe0d8d4a1488cec4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy assignment; acts similarly to copy ctor.  <a href="structipc_1_1util_1_1Native__handle.html#ad1d01d9b502f65c6fe0d8d4a1488cec4">More...</a><br /></td></tr>
<tr class="separator:ad1d01d9b502f65c6fe0d8d4a1488cec4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a11bd62ce0a7bef4bdfe666201c26d4dc"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structipc_1_1util_1_1Native__handle.html#a11bd62ce0a7bef4bdfe666201c26d4dc">null</a> () const</td></tr>
<tr class="memdesc:a11bd62ce0a7bef4bdfe666201c26d4dc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns <code>true</code> if and only if <a class="el" href="structipc_1_1util_1_1Native__handle.html#ab2f496740139c5752a25a30cf3325d86" title="The native handle (possibly equal to S_NULL_HANDLE), the exact payload of this Native_handle.">m_native_handle</a> equals <a class="el" href="structipc_1_1util_1_1Native__handle.html#a68e693929170523d58b541d466bac03a" title="The value for m_native_handle such that null() == true; else it is false.">S_NULL_HANDLE</a>.  <a href="structipc_1_1util_1_1Native__handle.html#a11bd62ce0a7bef4bdfe666201c26d4dc">More...</a><br /></td></tr>
<tr class="separator:a11bd62ce0a7bef4bdfe666201c26d4dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a>
Public Attributes</h2></td></tr>
<tr class="memitem:ab2f496740139c5752a25a30cf3325d86"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structipc_1_1util_1_1Native__handle.html#a7194e8aaf9fc0109aad80222ae4ecb25">handle_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structipc_1_1util_1_1Native__handle.html#ab2f496740139c5752a25a30cf3325d86">m_native_handle</a></td></tr>
<tr class="memdesc:ab2f496740139c5752a25a30cf3325d86"><td class="mdescLeft">&#160;</td><td class="mdescRight">The native handle (possibly equal to <a class="el" href="structipc_1_1util_1_1Native__handle.html#a68e693929170523d58b541d466bac03a" title="The value for m_native_handle such that null() == true; else it is false.">S_NULL_HANDLE</a>), the exact payload of this <a class="el" href="structipc_1_1util_1_1Native__handle.html" title="A monolayer-thin wrapper around a native handle, a/k/a descriptor a/k/a FD.">Native_handle</a>.  <a href="structipc_1_1util_1_1Native__handle.html#ab2f496740139c5752a25a30cf3325d86">More...</a><br /></td></tr>
<tr class="separator:ab2f496740139c5752a25a30cf3325d86"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-static-attribs" name="pub-static-attribs"></a>
Static Public Attributes</h2></td></tr>
<tr class="memitem:a68e693929170523d58b541d466bac03a"><td class="memItemLeft" align="right" valign="top">static const <a class="el" href="structipc_1_1util_1_1Native__handle.html#a7194e8aaf9fc0109aad80222ae4ecb25">handle_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structipc_1_1util_1_1Native__handle.html#a68e693929170523d58b541d466bac03a">S_NULL_HANDLE</a> = -1</td></tr>
<tr class="memdesc:a68e693929170523d58b541d466bac03a"><td class="mdescLeft">&#160;</td><td class="mdescRight">The value for <a class="el" href="structipc_1_1util_1_1Native__handle.html#ab2f496740139c5752a25a30cf3325d86" title="The native handle (possibly equal to S_NULL_HANDLE), the exact payload of this Native_handle.">m_native_handle</a> such that <code><a class="el" href="structipc_1_1util_1_1Native__handle.html#a11bd62ce0a7bef4bdfe666201c26d4dc" title="Returns true if and only if m_native_handle equals S_NULL_HANDLE.">null()</a> == true</code>; else it is <code>false</code>.  <a href="structipc_1_1util_1_1Native__handle.html#a68e693929170523d58b541d466bac03a">More...</a><br /></td></tr>
<tr class="separator:a68e693929170523d58b541d466bac03a"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="related" name="related"></a>
Related Functions</h2></td></tr>
<tr><td class="ititle" colspan="2"><p >(Note that these are not member functions.) </p>
</td></tr>
<tr class="memitem:ae4b4126f841ef060cdae15998e48691c"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structipc_1_1util_1_1Native__handle.html#ae4b4126f841ef060cdae15998e48691c">operator==</a> (<a class="el" href="structipc_1_1util_1_1Native__handle.html">Native_handle</a> val1, <a class="el" href="structipc_1_1util_1_1Native__handle.html">Native_handle</a> val2)</td></tr>
<tr class="memdesc:ae4b4126f841ef060cdae15998e48691c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns <code>true</code> if and only if the two <a class="el" href="structipc_1_1util_1_1Native__handle.html" title="A monolayer-thin wrapper around a native handle, a/k/a descriptor a/k/a FD.">Native_handle</a> objects are the same underlying handle.  <a href="structipc_1_1util_1_1Native__handle.html#ae4b4126f841ef060cdae15998e48691c">More...</a><br /></td></tr>
<tr class="separator:ae4b4126f841ef060cdae15998e48691c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aacbd7ee43d4912a8790a228dc7cf682d"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structipc_1_1util_1_1Native__handle.html#aacbd7ee43d4912a8790a228dc7cf682d">operator!=</a> (<a class="el" href="structipc_1_1util_1_1Native__handle.html">Native_handle</a> val1, <a class="el" href="structipc_1_1util_1_1Native__handle.html">Native_handle</a> val2)</td></tr>
<tr class="memdesc:aacbd7ee43d4912a8790a228dc7cf682d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Negation of similar <code>==</code>.  <a href="structipc_1_1util_1_1Native__handle.html#aacbd7ee43d4912a8790a228dc7cf682d">More...</a><br /></td></tr>
<tr class="separator:aacbd7ee43d4912a8790a228dc7cf682d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6ff4b35d8fbbe2eb6266f3a7b0f07c49"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structipc_1_1util_1_1Native__handle.html#a6ff4b35d8fbbe2eb6266f3a7b0f07c49">operator&lt;</a> (<a class="el" href="structipc_1_1util_1_1Native__handle.html">Native_handle</a> val1, <a class="el" href="structipc_1_1util_1_1Native__handle.html">Native_handle</a> val2)</td></tr>
<tr class="memdesc:a6ff4b35d8fbbe2eb6266f3a7b0f07c49"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a less-than comparison of two <a class="el" href="structipc_1_1util_1_1Native__handle.html" title="A monolayer-thin wrapper around a native handle, a/k/a descriptor a/k/a FD.">Native_handle</a> objects, with the usual total ordering guarantees.  <a href="structipc_1_1util_1_1Native__handle.html#a6ff4b35d8fbbe2eb6266f3a7b0f07c49">More...</a><br /></td></tr>
<tr class="separator:a6ff4b35d8fbbe2eb6266f3a7b0f07c49"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad3883df3081441d71a9a989073264b04"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structipc_1_1util_1_1Native__handle.html#ad3883df3081441d71a9a989073264b04">hash_value</a> (<a class="el" href="structipc_1_1util_1_1Native__handle.html">Native_handle</a> val)</td></tr>
<tr class="memdesc:ad3883df3081441d71a9a989073264b04"><td class="mdescLeft">&#160;</td><td class="mdescRight">Hasher of <a class="el" href="structipc_1_1util_1_1Native__handle.html" title="A monolayer-thin wrapper around a native handle, a/k/a descriptor a/k/a FD.">Native_handle</a> for boost.unordered et al.  <a href="structipc_1_1util_1_1Native__handle.html#ad3883df3081441d71a9a989073264b04">More...</a><br /></td></tr>
<tr class="separator:ad3883df3081441d71a9a989073264b04"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a28030c32e9c66f5c2862cbc6998885c7"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structipc_1_1util_1_1Native__handle.html#a28030c32e9c66f5c2862cbc6998885c7">operator&lt;&lt;</a> (std::ostream &amp;os, const <a class="el" href="structipc_1_1util_1_1Native__handle.html">Native_handle</a> &amp;val)</td></tr>
<tr class="memdesc:a28030c32e9c66f5c2862cbc6998885c7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints string representation of the given <a class="el" href="structipc_1_1util_1_1Native__handle.html" title="A monolayer-thin wrapper around a native handle, a/k/a descriptor a/k/a FD.">Native_handle</a> to the given <code>ostream</code>.  <a href="structipc_1_1util_1_1Native__handle.html#a28030c32e9c66f5c2862cbc6998885c7">More...</a><br /></td></tr>
<tr class="separator:a28030c32e9c66f5c2862cbc6998885c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p >A monolayer-thin wrapper around a native handle, a/k/a descriptor a/k/a FD. </p>
<p >It would have been acceptable to simply use an alias to the native handle type (in POSIX, <code>int</code>), but this way is better stylistically with exactly zero performance overhead. Initialize it, e.g., <code><a class="el" href="structipc_1_1util_1_1Native__handle.html" title="A monolayer-thin wrapper around a native handle, a/k/a descriptor a/k/a FD.">Native_handle</a> hndl(some_fd);</code>, where <code>some_fd</code> might be some POSIX-y FD (network socket, Unix domain socket, file descriptor, etc.). Or initialize via no-arg construction which results in an <code><a class="el" href="structipc_1_1util_1_1Native__handle.html#a11bd62ce0a7bef4bdfe666201c26d4dc" title="Returns true if and only if m_native_handle equals S_NULL_HANDLE.">null()</a> == true</code> object. Copy construction, assignment, equality, total ordering, and hashing all work as one would expect and essentially the same as on the underlying native handles.</p>
<p >It is either <a class="el" href="structipc_1_1util_1_1Native__handle.html#a11bd62ce0a7bef4bdfe666201c26d4dc" title="Returns true if and only if m_native_handle equals S_NULL_HANDLE.">null()</a> or stores a native handle. In the former case, <a class="el" href="structipc_1_1util_1_1Native__handle.html#a11bd62ce0a7bef4bdfe666201c26d4dc" title="Returns true if and only if m_native_handle equals S_NULL_HANDLE.">null()</a> being <code>true</code> means explicitly that <code>m_native_handle == <a class="el" href="structipc_1_1util_1_1Native__handle.html#a68e693929170523d58b541d466bac03a" title="The value for m_native_handle such that null() == true; else it is false.">Native_handle::S_NULL_HANDLE</a></code>.</p>
<h3>Rationale</h3>
<p >Originally we tried to make it aggregate-initializable, like <code><a class="el" href="structipc_1_1util_1_1Native__handle.html" title="A monolayer-thin wrapper around a native handle, a/k/a descriptor a/k/a FD.">Native_handle</a> hndl = {some_fd}</code>; for example see standard <code>array&lt;&gt;</code>. This is reassuring perf-wise; and it involves less (i.e., no) code to boot. However, it really is just one light-weight scalar, and there's 0% chance explicit construction is any slower. So, perf isn't an issue. Still, why not make it aggregate-initializable though? I (ygoldfel) gave up, eventually, because I wanted <em>some</em> non-default-behavior constructors to be available, namely no-args (<code><a class="el" href="structipc_1_1util_1_1Native__handle.html#a54a6ce76ea4ce5aa68da13d7a677ca9f" title="Constructs with given payload; also subsumes no-args construction to mean constructing an object with...">Native_handle()</a></code> that makes an <code><a class="el" href="structipc_1_1util_1_1Native__handle.html#a11bd62ce0a7bef4bdfe666201c26d4dc" title="Returns true if and only if m_native_handle equals S_NULL_HANDLE.">null()</a> == true</code> one) and move (<code><a class="el" href="structipc_1_1util_1_1Native__handle.html#a7176d013b1f8e0e09ba45d6fe7a81bb5" title="Constructs object equal to src, while making src == null().">Native_handle(Native_handle&amp;&amp;)</a></code> that nullifies the source object). This isn't allowed in aggregate-initializable classes; so then I made some <code>static</code> "constructors" instead; but those aren't sufficient for containers... and on it went. This way, though verbose, just works out better for the API. </p>

<p class="definition">Definition at line <a class="el" href="native__handle_8hpp_source.html#l00062">62</a> of file <a class="el" href="native__handle_8hpp_source.html">native_handle.hpp</a>.</p>
</div><h2 class="groupheader">Member Typedef Documentation</h2>
<a id="a7194e8aaf9fc0109aad80222ae4ecb25" name="a7194e8aaf9fc0109aad80222ae4ecb25"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7194e8aaf9fc0109aad80222ae4ecb25">&#9670;&nbsp;</a></span>handle_t</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="structipc_1_1util_1_1Native__handle.html#a7194e8aaf9fc0109aad80222ae4ecb25">ipc::util::Native_handle::handle_t</a> =  int</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>The native handle type. Much logic relies on this type being light-weight (fast to copy). </p>

<p class="definition">Definition at line <a class="el" href="native__handle_8hpp_source.html#l00067">67</a> of file <a class="el" href="native__handle_8hpp_source.html">native_handle.hpp</a>.</p>

</div>
</div>
<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="a54a6ce76ea4ce5aa68da13d7a677ca9f" name="a54a6ce76ea4ce5aa68da13d7a677ca9f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a54a6ce76ea4ce5aa68da13d7a677ca9f">&#9670;&nbsp;</a></span>Native_handle() <span class="overload">[1/3]</span></h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">ipc::util::Native_handle::Native_handle </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structipc_1_1util_1_1Native__handle.html#a7194e8aaf9fc0109aad80222ae4ecb25">handle_t</a>&#160;</td>
          <td class="paramname"><em>native_handle</em> = <code><a class="el" href="structipc_1_1util_1_1Native__handle.html#a68e693929170523d58b541d466bac03a">S_NULL_HANDLE</a></code></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Constructs with given payload; also subsumes no-args construction to mean constructing an object with <code><a class="el" href="structipc_1_1util_1_1Native__handle.html#a11bd62ce0a7bef4bdfe666201c26d4dc" title="Returns true if and only if m_native_handle equals S_NULL_HANDLE.">null()</a> == true</code>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">native_handle</td><td>Payload. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="native__handle_8cpp_source.html#l00033">33</a> of file <a class="el" href="native__handle_8cpp_source.html">native_handle.cpp</a>.</p>

</div>
</div>
<a id="a7176d013b1f8e0e09ba45d6fe7a81bb5" name="a7176d013b1f8e0e09ba45d6fe7a81bb5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7176d013b1f8e0e09ba45d6fe7a81bb5">&#9670;&nbsp;</a></span>Native_handle() <span class="overload">[2/3]</span></h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">ipc::util::Native_handle::Native_handle </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structipc_1_1util_1_1Native__handle.html">Native_handle</a> &amp;&amp;&#160;</td>
          <td class="paramname"><em>src</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Constructs object equal to <code>src</code>, while making <code>src == <a class="el" href="structipc_1_1util_1_1Native__handle.html#a11bd62ce0a7bef4bdfe666201c26d4dc" title="Returns true if and only if m_native_handle equals S_NULL_HANDLE.">null()</a></code>. </p>
<h3>Rationale</h3>
<p >This is move construction, but it's not about performance at all (as this is all quite cheap anyway); more to allow for the pattern of making an object from another object without propagating more copies of the underlying handle. Won't the default move ctor take care of it? No, because it'll just copy the handle and not nullify it.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">src</td><td>Source object which will be made <code><a class="el" href="structipc_1_1util_1_1Native__handle.html#a11bd62ce0a7bef4bdfe666201c26d4dc" title="Returns true if and only if m_native_handle equals S_NULL_HANDLE.">null()</a> == true</code>. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="native__handle_8cpp_source.html#l00039">39</a> of file <a class="el" href="native__handle_8cpp_source.html">native_handle.cpp</a>.</p>

<p class="reference">References <a class="el" href="native__handle_8cpp_source.html#l00047">operator=()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="structipc_1_1util_1_1Native__handle_a7176d013b1f8e0e09ba45d6fe7a81bb5_cgraph.svg" width="539" height="83"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a45ae7a5b093b5419a524cf30b07921c4" name="a45ae7a5b093b5419a524cf30b07921c4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a45ae7a5b093b5419a524cf30b07921c4">&#9670;&nbsp;</a></span>Native_handle() <span class="overload">[3/3]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">ipc::util::Native_handle::Native_handle </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structipc_1_1util_1_1Native__handle.html">Native_handle</a> &amp;&#160;</td>
          <td class="paramname"><em>src</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">default</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Copy constructor. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">src</td><td>Source object. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="a11bd62ce0a7bef4bdfe666201c26d4dc" name="a11bd62ce0a7bef4bdfe666201c26d4dc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a11bd62ce0a7bef4bdfe666201c26d4dc">&#9670;&nbsp;</a></span>null()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool ipc::util::Native_handle::null </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Returns <code>true</code> if and only if <a class="el" href="structipc_1_1util_1_1Native__handle.html#ab2f496740139c5752a25a30cf3325d86" title="The native handle (possibly equal to S_NULL_HANDLE), the exact payload of this Native_handle.">m_native_handle</a> equals <a class="el" href="structipc_1_1util_1_1Native__handle.html#a68e693929170523d58b541d466bac03a" title="The value for m_native_handle such that null() == true; else it is false.">S_NULL_HANDLE</a>. </p>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="native__handle_8cpp_source.html#l00061">61</a> of file <a class="el" href="native__handle_8cpp_source.html">native_handle.cpp</a>.</p>

<p class="reference">References <a class="el" href="native__handle_8hpp_source.html#l00085">m_native_handle</a>, and <a class="el" href="native__handle_8hpp_source.html#l00075">S_NULL_HANDLE</a>.</p>

<p class="reference">Referenced by <a class="el" href="posix__mq__handle_8cpp_source.html#l01118">ipc::transport::Posix_mq_handle::allow_impl()</a>, <a class="el" href="asio__waitable__native__hndl_8cpp_source.html#l00027">ipc::util::sync_io::Asio_waitable_native_handle::Asio_waitable_native_handle()</a>, <a class="el" href="asio__waitable__native__hndl_8cpp_source.html#l00065">ipc::util::sync_io::Asio_waitable_native_handle::assign()</a>, <a class="el" href="asio__local__stream__socket_8hpp_source.html#l00171">ipc::transport::asio_local_stream_socket::async_write_with_native_handle()</a>, <a class="el" href="app_8cpp_source.html#l00080">ipc::session::ensure_resource_owner_is_app()</a>, <a class="el" href="posix__mq__handle_8cpp_source.html#l01079">ipc::transport::Posix_mq_handle::interrupt_impl()</a>, <a class="el" href="posix__mq__handle_8cpp_source.html#l00616">ipc::transport::Posix_mq_handle::max_msg_size()</a>, <a class="el" href="posix__mq__handle_8cpp_source.html#l00641">ipc::transport::Posix_mq_handle::max_n_msgs()</a>, <a class="el" href="native__socket__stream__acceptor_8cpp_source.html#l00192">ipc::transport::Native_socket_stream_acceptor::on_next_peer_socket_or_error()</a>, <a class="el" href="native__handle_8cpp_source.html#l00066">operator&lt;&lt;()</a>, <a class="el" href="posix__mq__handle_8cpp_source.html#l00060">ipc::transport::Posix_mq_handle::Posix_mq_handle()</a>, <a class="el" href="ipc__transport__structured_2src_2ipc_2transport_2struc_2sync__io_2channel_8hpp_source.html#l02744">ipc::transport::struc::sync_io::Channel&lt; Channel_obj, Message_body, Struct_builder_config, Struct_reader_config &gt;::rcv_async_read_lead_or_continuation_msg()</a>, <a class="el" href="native__socket__stream__impl__rcv_8cpp_source.html#l00683">ipc::transport::sync_io::Native_socket_stream::Impl::rcv_nb_read_low_lvl_payload()</a>, <a class="el" href="ipc__transport__structured_2src_2ipc_2transport_2struc_2sync__io_2channel_8hpp_source.html#l03068">ipc::transport::struc::sync_io::Channel&lt; Channel_obj, Message_body, Struct_builder_config, Struct_reader_config &gt;::rcv_on_async_read_continuation_msg()</a>, <a class="el" href="ipc__transport__structured_2src_2ipc_2transport_2struc_2sync__io_2channel_8hpp_source.html#l02924">ipc::transport::struc::sync_io::Channel&lt; Channel_obj, Message_body, Struct_builder_config, Struct_reader_config &gt;::rcv_on_async_read_lead_msg()</a>, <a class="el" href="ipc__transport__structured_2src_2ipc_2transport_2struc_2sync__io_2channel_8hpp_source.html#l03248">ipc::transport::struc::sync_io::Channel&lt; Channel_obj, Message_body, Struct_builder_config, Struct_reader_config &gt;::rcv_on_async_read_proto_neg_msg()</a>, <a class="el" href="native__socket__stream__impl__rcv_8cpp_source.html#l00348">ipc::transport::sync_io::Native_socket_stream::Impl::rcv_on_handle_finalized()</a>, <a class="el" href="posix__mq__handle_8cpp_source.html#l00926">ipc::transport::Posix_mq_handle::receive()</a>, <a class="el" href="posix__mq__handle_8cpp_source.html#l00728">ipc::transport::Posix_mq_handle::send()</a>, <a class="el" href="native__socket__stream__impl__snd_8cpp_source.html#l00094">ipc::transport::sync_io::Native_socket_stream::Impl::send_native_handle()</a>, <a class="el" href="ipc__core_2src_2ipc_2util_2util_8cpp_source.html#l00098">ipc::util::set_resource_permissions()</a>, <a class="el" href="native__socket__stream__impl__snd_8cpp_source.html#l00739">ipc::transport::sync_io::Native_socket_stream::Impl::snd_nb_write_low_lvl_payload()</a>, <a class="el" href="native__socket__stream__impl__snd_8cpp_source.html#l00605">ipc::transport::sync_io::Native_socket_stream::Impl::snd_sync_write_or_q_payload()</a>, <a class="el" href="posix__mq__handle_8cpp_source.html#l00994">ipc::transport::Posix_mq_handle::timed_receive()</a>, <a class="el" href="posix__mq__handle_8cpp_source.html#l00796">ipc::transport::Posix_mq_handle::timed_send()</a>, <a class="el" href="posix__mq__handle_8cpp_source.html#l00880">ipc::transport::Posix_mq_handle::try_receive()</a>, <a class="el" href="posix__mq__handle_8cpp_source.html#l00678">ipc::transport::Posix_mq_handle::try_send()</a>, <a class="el" href="posix__mq__handle_8cpp_source.html#l01178">ipc::transport::Posix_mq_handle::wait_impl()</a>, and <a class="el" href="posix__mq__handle_8cpp_source.html#l00501">ipc::transport::Posix_mq_handle::~Posix_mq_handle()</a>.</p>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="structipc_1_1util_1_1Native__handle_a11bd62ce0a7bef4bdfe666201c26d4dc_icgraph.svg" width="935" height="2174"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="ad1d01d9b502f65c6fe0d8d4a1488cec4" name="ad1d01d9b502f65c6fe0d8d4a1488cec4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad1d01d9b502f65c6fe0d8d4a1488cec4">&#9670;&nbsp;</a></span>operator=() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="structipc_1_1util_1_1Native__handle.html">Native_handle</a> &amp; ipc::util::Native_handle::operator= </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structipc_1_1util_1_1Native__handle.html">Native_handle</a> &amp;&#160;</td>
          <td class="paramname"><em>src</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">default</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Copy assignment; acts similarly to copy ctor. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">src</td><td>Source object. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>*this</code>. </dd></dl>

</div>
</div>
<a id="a6e321b8cc4628d56cc903beae13c6438" name="a6e321b8cc4628d56cc903beae13c6438"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6e321b8cc4628d56cc903beae13c6438">&#9670;&nbsp;</a></span>operator=() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="structipc_1_1util_1_1Native__handle.html">Native_handle</a> &amp; ipc::util::Native_handle::operator= </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structipc_1_1util_1_1Native__handle.html">Native_handle</a> &amp;&amp;&#160;</td>
          <td class="paramname"><em>src</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Move assignment; acts similarly to move ctor; but no-op if <code>*this == src</code>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">src</td><td>Source object which will be made <code><a class="el" href="structipc_1_1util_1_1Native__handle.html#a11bd62ce0a7bef4bdfe666201c26d4dc" title="Returns true if and only if m_native_handle equals S_NULL_HANDLE.">null()</a> == true</code>, unles <code>*this == src</code>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>*this</code>. </dd></dl>

<p class="definition">Definition at line <a class="el" href="native__handle_8cpp_source.html#l00047">47</a> of file <a class="el" href="native__handle_8cpp_source.html">native_handle.cpp</a>.</p>

<p class="reference">References <a class="el" href="native__handle_8hpp_source.html#l00085">m_native_handle</a>, <a class="el" href="native__handle_8hpp_source.html#l00075">S_NULL_HANDLE</a>, <a class="el" href="bipc__mq__handle_8cpp_source.html#l00130">ipc::transport::swap()</a>, and <a class="el" href="shared__name_8cpp_source.html#l00420">ipc::util::swap()</a>.</p>

<p class="reference">Referenced by <a class="el" href="native__handle_8cpp_source.html#l00039">Native_handle()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="structipc_1_1util_1_1Native__handle_a6e321b8cc4628d56cc903beae13c6438_cgraph.svg" width="342" height="83"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="structipc_1_1util_1_1Native__handle_a6e321b8cc4628d56cc903beae13c6438_icgraph.svg" width="358" height="47"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<h2 class="groupheader">Friends And Related Function Documentation</h2>
<a id="ad3883df3081441d71a9a989073264b04" name="ad3883df3081441d71a9a989073264b04"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad3883df3081441d71a9a989073264b04">&#9670;&nbsp;</a></span>hash_value()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">size_t hash_value </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structipc_1_1util_1_1Native__handle.html">Native_handle</a>&#160;</td>
          <td class="paramname"><em>val</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">related</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Hasher of <a class="el" href="structipc_1_1util_1_1Native__handle.html" title="A monolayer-thin wrapper around a native handle, a/k/a descriptor a/k/a FD.">Native_handle</a> for boost.unordered et al. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">val</td><td>Object to hash. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="native__handle_8cpp_source.html#l00090">90</a> of file <a class="el" href="native__handle_8cpp_source.html">native_handle.cpp</a>.</p>

<p class="reference">References <a class="el" href="native__handle_8hpp_source.html#l00085">m_native_handle</a>.</p>

</div>
</div>
<a id="aacbd7ee43d4912a8790a228dc7cf682d" name="aacbd7ee43d4912a8790a228dc7cf682d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aacbd7ee43d4912a8790a228dc7cf682d">&#9670;&nbsp;</a></span>operator!=()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">bool operator!= </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structipc_1_1util_1_1Native__handle.html">Native_handle</a>&#160;</td>
          <td class="paramname"><em>val1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structipc_1_1util_1_1Native__handle.html">Native_handle</a>&#160;</td>
          <td class="paramname"><em>val2</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">related</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Negation of similar <code>==</code>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">val1</td><td>Object. </td></tr>
    <tr><td class="paramname">val2</td><td>Object. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="native__handle_8cpp_source.html#l00085">85</a> of file <a class="el" href="native__handle_8cpp_source.html">native_handle.cpp</a>.</p>

<p class="reference">References <a class="el" href="native__handle_8cpp_source.html#l00080">ipc::util::operator==()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="structipc_1_1util_1_1Native__handle_aacbd7ee43d4912a8790a228dc7cf682d_cgraph.svg" width="344" height="47"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a6ff4b35d8fbbe2eb6266f3a7b0f07c49" name="a6ff4b35d8fbbe2eb6266f3a7b0f07c49"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6ff4b35d8fbbe2eb6266f3a7b0f07c49">&#9670;&nbsp;</a></span>operator&lt;()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">bool operator&lt; </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structipc_1_1util_1_1Native__handle.html">Native_handle</a>&#160;</td>
          <td class="paramname"><em>val1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structipc_1_1util_1_1Native__handle.html">Native_handle</a>&#160;</td>
          <td class="paramname"><em>val2</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">related</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns a less-than comparison of two <a class="el" href="structipc_1_1util_1_1Native__handle.html" title="A monolayer-thin wrapper around a native handle, a/k/a descriptor a/k/a FD.">Native_handle</a> objects, with the usual total ordering guarantees. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">val1</td><td>Left-hand side object. </td></tr>
    <tr><td class="paramname">val2</td><td>Right-hand side object. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Whether left side is considered strictly less-than right side. </dd></dl>

<p class="definition">Definition at line <a class="el" href="native__handle_8cpp_source.html#l00097">97</a> of file <a class="el" href="native__handle_8cpp_source.html">native_handle.cpp</a>.</p>

<p class="reference">References <a class="el" href="native__handle_8hpp_source.html#l00085">m_native_handle</a>.</p>

</div>
</div>
<a id="a28030c32e9c66f5c2862cbc6998885c7" name="a28030c32e9c66f5c2862cbc6998885c7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a28030c32e9c66f5c2862cbc6998885c7">&#9670;&nbsp;</a></span>operator&lt;&lt;()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">std::ostream &amp; operator&lt;&lt; </td>
          <td>(</td>
          <td class="paramtype">std::ostream &amp;&#160;</td>
          <td class="paramname"><em>os</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structipc_1_1util_1_1Native__handle.html">Native_handle</a> &amp;&#160;</td>
          <td class="paramname"><em>val</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">related</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Prints string representation of the given <a class="el" href="structipc_1_1util_1_1Native__handle.html" title="A monolayer-thin wrapper around a native handle, a/k/a descriptor a/k/a FD.">Native_handle</a> to the given <code>ostream</code>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">os</td><td>Stream to which to write. </td></tr>
    <tr><td class="paramname">val</td><td>Object to serialize. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>os</code>. </dd></dl>

<p class="definition">Definition at line <a class="el" href="native__handle_8cpp_source.html#l00066">66</a> of file <a class="el" href="native__handle_8cpp_source.html">native_handle.cpp</a>.</p>

<p class="reference">References <a class="el" href="native__handle_8hpp_source.html#l00085">m_native_handle</a>, and <a class="el" href="native__handle_8cpp_source.html#l00061">null()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="structipc_1_1util_1_1Native__handle_a28030c32e9c66f5c2862cbc6998885c7_cgraph.svg" width="358" height="47"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="ae4b4126f841ef060cdae15998e48691c" name="ae4b4126f841ef060cdae15998e48691c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae4b4126f841ef060cdae15998e48691c">&#9670;&nbsp;</a></span>operator==()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">bool operator== </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structipc_1_1util_1_1Native__handle.html">Native_handle</a>&#160;</td>
          <td class="paramname"><em>val1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structipc_1_1util_1_1Native__handle.html">Native_handle</a>&#160;</td>
          <td class="paramname"><em>val2</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">related</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns <code>true</code> if and only if the two <a class="el" href="structipc_1_1util_1_1Native__handle.html" title="A monolayer-thin wrapper around a native handle, a/k/a descriptor a/k/a FD.">Native_handle</a> objects are the same underlying handle. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">val1</td><td>Object. </td></tr>
    <tr><td class="paramname">val2</td><td>Object. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="native__handle_8cpp_source.html#l00080">80</a> of file <a class="el" href="native__handle_8cpp_source.html">native_handle.cpp</a>.</p>

<p class="reference">References <a class="el" href="native__handle_8hpp_source.html#l00085">m_native_handle</a>.</p>

</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a id="ab2f496740139c5752a25a30cf3325d86" name="ab2f496740139c5752a25a30cf3325d86"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab2f496740139c5752a25a30cf3325d86">&#9670;&nbsp;</a></span>m_native_handle</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="structipc_1_1util_1_1Native__handle.html#a7194e8aaf9fc0109aad80222ae4ecb25">handle_t</a> ipc::util::Native_handle::m_native_handle</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>The native handle (possibly equal to <a class="el" href="structipc_1_1util_1_1Native__handle.html#a68e693929170523d58b541d466bac03a" title="The value for m_native_handle such that null() == true; else it is false.">S_NULL_HANDLE</a>), the exact payload of this <a class="el" href="structipc_1_1util_1_1Native__handle.html" title="A monolayer-thin wrapper around a native handle, a/k/a descriptor a/k/a FD.">Native_handle</a>. </p>
<p >It can, of course, be assigned and accessed explicitly. The best way to initialize a new <a class="el" href="structipc_1_1util_1_1Native__handle.html" title="A monolayer-thin wrapper around a native handle, a/k/a descriptor a/k/a FD.">Native_handle</a> is, therefore: <code><a class="el" href="structipc_1_1util_1_1Native__handle.html" title="A monolayer-thin wrapper around a native handle, a/k/a descriptor a/k/a FD.">Native_handle</a>{some_native_handle}</code>. You may also use the <a class="el" href="structipc_1_1util_1_1Native__handle.html#a11bd62ce0a7bef4bdfe666201c26d4dc" title="Returns true if and only if m_native_handle equals S_NULL_HANDLE.">null()</a> "constructor" to create a <a class="el" href="structipc_1_1util_1_1Native__handle.html#a11bd62ce0a7bef4bdfe666201c26d4dc" title="Returns true if and only if m_native_handle equals S_NULL_HANDLE.">null()</a> handle. </p>

<p class="definition">Definition at line <a class="el" href="native__handle_8hpp_source.html#l00085">85</a> of file <a class="el" href="native__handle_8hpp_source.html">native_handle.hpp</a>.</p>

<p class="reference">Referenced by <a class="el" href="asio__waitable__native__hndl_8cpp_source.html#l00065">ipc::util::sync_io::Asio_waitable_native_handle::assign()</a>, <a class="el" href="app_8cpp_source.html#l00080">ipc::session::ensure_resource_owner_is_app()</a>, <a class="el" href="posix__mq__handle_8cpp_source.html#l00404">ipc::transport::Posix_mq_handle::epoll_setup()</a>, <a class="el" href="native__handle_8cpp_source.html#l00090">hash_value()</a>, <a class="el" href="posix__mq__handle_8cpp_source.html#l00616">ipc::transport::Posix_mq_handle::max_msg_size()</a>, <a class="el" href="posix__mq__handle_8cpp_source.html#l00641">ipc::transport::Posix_mq_handle::max_n_msgs()</a>, <a class="el" href="asio__local__stream__socket_8cpp_source.html#l00036">ipc::transport::asio_local_stream_socket::nb_write_some_with_native_handle()</a>, <a class="el" href="native__handle_8cpp_source.html#l00061">null()</a>, <a class="el" href="native__handle_8cpp_source.html#l00097">operator&lt;()</a>, <a class="el" href="native__handle_8cpp_source.html#l00066">operator&lt;&lt;()</a>, <a class="el" href="native__handle_8cpp_source.html#l00047">operator=()</a>, <a class="el" href="native__handle_8cpp_source.html#l00080">operator==()</a>, <a class="el" href="posix__mq__handle_8cpp_source.html#l00060">ipc::transport::Posix_mq_handle::Posix_mq_handle()</a>, <a class="el" href="posix__mq__handle_8cpp_source.html#l00926">ipc::transport::Posix_mq_handle::receive()</a>, <a class="el" href="sync__io_2detail_2blob__stream__mq__rcv__impl_8hpp_source.html#l00612">ipc::transport::sync_io::Blob_stream_mq_receiver_impl&lt; Persistent_mq_handle &gt;::replace_event_wait_handles()</a>, <a class="el" href="sync__io_2detail_2blob__stream__mq__snd__impl_8hpp_source.html#l00789">ipc::transport::sync_io::Blob_stream_mq_sender_impl&lt; Persistent_mq_handle &gt;::replace_event_wait_handles()</a>, <a class="el" href="sync__io_2detail_2native__socket__stream__impl_8cpp_source.html#l00441">ipc::transport::sync_io::Native_socket_stream::Impl::replace_event_wait_handles()</a>, <a class="el" href="posix__mq__handle_8cpp_source.html#l00728">ipc::transport::Posix_mq_handle::send()</a>, <a class="el" href="posix__mq__handle_8cpp_source.html#l00660">ipc::transport::Posix_mq_handle::set_non_blocking()</a>, <a class="el" href="ipc__core_2src_2ipc_2util_2util_8cpp_source.html#l00098">ipc::util::set_resource_permissions()</a>, <a class="el" href="posix__mq__handle_8cpp_source.html#l00994">ipc::transport::Posix_mq_handle::timed_receive()</a>, <a class="el" href="posix__mq__handle_8cpp_source.html#l00796">ipc::transport::Posix_mq_handle::timed_send()</a>, <a class="el" href="posix__mq__handle_8cpp_source.html#l00880">ipc::transport::Posix_mq_handle::try_receive()</a>, <a class="el" href="posix__mq__handle_8cpp_source.html#l00678">ipc::transport::Posix_mq_handle::try_send()</a>, <a class="el" href="posix__mq__handle_8cpp_source.html#l01178">ipc::transport::Posix_mq_handle::wait_impl()</a>, and <a class="el" href="posix__mq__handle_8cpp_source.html#l00501">ipc::transport::Posix_mq_handle::~Posix_mq_handle()</a>.</p>

</div>
</div>
<a id="a68e693929170523d58b541d466bac03a" name="a68e693929170523d58b541d466bac03a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a68e693929170523d58b541d466bac03a">&#9670;&nbsp;</a></span>S_NULL_HANDLE</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">const <a class="el" href="structipc_1_1util_1_1Native__handle.html#a7194e8aaf9fc0109aad80222ae4ecb25">Native_handle::handle_t</a> ipc::util::Native_handle::S_NULL_HANDLE = -1</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>The value for <a class="el" href="structipc_1_1util_1_1Native__handle.html#ab2f496740139c5752a25a30cf3325d86" title="The native handle (possibly equal to S_NULL_HANDLE), the exact payload of this Native_handle.">m_native_handle</a> such that <code><a class="el" href="structipc_1_1util_1_1Native__handle.html#a11bd62ce0a7bef4bdfe666201c26d4dc" title="Returns true if and only if m_native_handle equals S_NULL_HANDLE.">null()</a> == true</code>; else it is <code>false</code>. </p>
<p >No valid handle ever equals this. </p>

<p class="definition">Definition at line <a class="el" href="native__handle_8hpp_source.html#l00075">75</a> of file <a class="el" href="native__handle_8hpp_source.html">native_handle.hpp</a>.</p>

<p class="reference">Referenced by <a class="el" href="native__handle_8cpp_source.html#l00061">null()</a>, and <a class="el" href="native__handle_8cpp_source.html#l00047">operator=()</a>.</p>

</div>
</div>
<hr/>The documentation for this struct was generated from the following files:<ul>
<li>util/<a class="el" href="native__handle_8hpp_source.html">native_handle.hpp</a></li>
<li>util/<a class="el" href="native__handle_8cpp_source.html">native_handle.cpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Apr 11 2025 20:02:27 for Flow-IPC by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
</small></address>
</body>
</html>
